package com.qrxl.util;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 数据校验
 *
 * @date 2017-5-28 16:10:54
 */
public abstract class JGAssert extends Assert {

    /**
     * 判断是否在规定的长度内
     *
     * @param str
     * @param minLength
     * @param maxLength
     * @param message
     */
    public static void isRange(String str, int minLength, int maxLength, String message) {
        if (StringUtils.isEmpty(str)) {
            throw new IllegalArgumentException(message);
        }
        if (str.length() < minLength || str.length() > maxLength) {
            throw new IllegalArgumentException(message);
        }
    }

    /**
     * 判断是否超过最大限制
     * <p>判定目标不可以为空</p>
     *
     * @param str
     * @param maxLength
     * @param message
     */
    public static void isMaxLength(String str, int maxLength, String message) {
        limitMaxLength(str, false, maxLength, message);
    }

    /**
     * 判断是否超过最大限制
     *
     * @param str       判定目标
     * @param nullAble  是否可空
     * @param maxLength 最大长度
     * @param message   提示信息
     */
    public static void limitMaxLength(String str, boolean nullAble, int maxLength, String message) {
        if (!nullAble) {
            if (StringUtils.isEmpty(str) || str.length() > maxLength) {
                throw new IllegalArgumentException(message);
            }
        } else {
            if (str != null && str.length() > maxLength) {
                throw new IllegalArgumentException(message);
            }
        }
    }

    /**
     * 判断是否都为空
     *
     * @param str 判定目标组
     */
    public static void allEmpty(String... str) {
        if (str == null) {
            throw new IllegalArgumentException("str[]不能同时为空！");
        }
        List<String> strList = Arrays.asList(str);
        long count = strList.stream().filter(StringUtils::isNotEmpty).count();
        if (count == 0) {
            throw new IllegalArgumentException("str[]不能同时为空！");
        }
    }

    /**
     * 判断是否为手机号码
     *
     * @param str
     */
    public static void isMobile(String str, boolean nullAble, String message) {
        if (!nullAble) {
            if (StringUtils.isEmpty(str)) {
                throw new IllegalArgumentException(message);
            }
        }
        if (!StringUtils.isEmpty(str)) {
            String regex = "^1\\d{10}$";
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(str);
            if (!m.matches()) {
                throw new IllegalArgumentException(message);
            }
        }
    }

    /**
     * 判断开始时间小于结束时间
     *
     * @param startDate
     * @param endDate
     */
    public static void isLegal(Date startDate, Date endDate, boolean nullAble, String message) {
        if (startDate == null || endDate == null) {
            if (!nullAble) {
                throw new IllegalArgumentException(message);
            } else {
                return;
            }
        }
        if (startDate.compareTo(endDate) > 0) {
            throw new IllegalArgumentException(message);
        }

    }
}
